<template>
  <div>
    <p>demo</p>
    <div id="toolbar-container" class="toolbar"></div>
    <div id="text-container" class="text">
    </div>
    <br/>
  </div>
</template>

<script>
import E from 'wangeditor'
import xss from 'xss'
import hljs from 'highlight.js'
import 'highlight.js/styles/monokai-sublime.css'

  export default {
    name: "EditorTemplate",
    data() {
      return {
        editor: null,
        editorData: null
      }
    },
    props: {
      value: {
        type: String,
        default: ""
      },
      isClear: {
        type: Boolean,
        default: false
      }
    },
    watch: {
      isClear(val) {
        // 触发清除文本域内容
        if (val) {
          this.editor.txt.clear();
          this.editorData = null;
        }
      }
    },
    mounted () {
      this.initEditor()
    },
    methods: {

      initEditor(){

        const editor = new E('#toolbar-container', '#text-container') // 传入两个元素

        // 挂载highlight插件 (代码高亮)
        editor.highlight = hljs

        // 配置 server 接口地址
        editor.config.uploadImgServer = 'uploadImage'

        // 默认限制图片大小是 5M
        editor.config.uploadImgMaxSize = 2 * 1024 * 1024 // 2M

        // 限制类型
        editor.config.uploadImgAccept = ['jpg', 'jpeg', 'png', 'gif', 'bmp']

        // 自定义上传参数
        // editor.config.uploadImgParams = {
        //   token: 'xxxxx',
        //   x: 100
        // }

        // 自定义 header
        // editor.config.uploadImgHeaders = {
        //   Accept: 'text/x-json',
        //   a: 100,
        // }


        // headers: {
        //   'Content-Type': 'multipart/form-data',
        // },


        editor.config.uploadImgHooks = {
          // 上传图片之前
          before: function(xhr) {
            console.log(xhr)

            // 可阻止图片上传
            return {
              prevent: true,
              msg: '需要提示给用户的错误信息'
            }
          },
          // 图片上传并返回了结果，图片插入已成功
          success: function(xhr) {
            console.log('success', xhr)
          },
          // 图片上传并返回了结果，但图片插入时出错了
          fail: function(xhr, editor, resData) {
            console.log('fail', resData)
          },
          // 上传图片出错，一般为 http 请求的错误
          error: function(xhr, editor, resData) {
            console.log('error', xhr, resData)
          },
          // 上传图片超时
          // eslint-disable-next-line no-unused-vars
          timeout: function(xhr) {
            console.log('timeout')
          },
          // 图片上传并返回了结果，想要自己把图片插入到编辑器中
          // 例如服务器端返回的不是 { errno: 0, data: [...] } 这种格式，可使用 customInsert
          customInsert: function(insertImgFn, result) {
            // result 即服务端返回的接口
            console.log('customInsert', result)

            // insertImgFn 可把图片插入到编辑器，传入图片 src ，执行函数即可
            insertImgFn(result.data[0])
          }
        }

        // 配置 onchange 回调函数
        editor.config.onchange = (html) => {
          let safeHtml = xss(html)
          // safeHtml = safeHtml.replace(/\bm.*?;/, "width:300px"); //更改插入到富文本里图片的宽度
          this.editorData = safeHtml
        }

        editor.create()

        this.editor = editor
      }
    },
  }
</script>

<style scoped>

.toolbar {
  border: 1px solid #ccc;
  width: 1000px;
}
.text {
  border: 1px solid #ccc;
  min-height: 400px;
  width: 1000px;
}

</style>